// 13.罗马数字转整数
package Leetcode_Second_Brush;

import java.util.HashMap;
import java.util.Map;

public class Solution013 {
    public int romanToInt(String s) {
        int[] values = new int[] { 1000, 500, 100, 50, 10, 5, 1 };
        Map<Character, Integer> symbols = new HashMap<Character, Integer>() {
            {
                put('M', 0);
                put('D', 1);
                put('C', 2);
                put('L', 3);
                put('X', 4);
                put('V', 5);
                put('I', 6);
            }
        };
        int result = 0;
        char[] sToArray = s.toCharArray();
        for (int i = 0; i < sToArray.length; i++) {
            // 当小数字在大数字左边时，为小数字添加负号
            if (i + 1 < sToArray.length && symbols.get(sToArray[i]) > symbols.get(sToArray[i + 1])) { // 这里必须使用短路，不然后面i+1可能越界
                result -= values[symbols.get(sToArray[i])];
                continue;
            }
            result += values[symbols.get(sToArray[i])];
        }
        return result;
    }
}
